/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufc.quixada.adrs.service;

import br.ufc.quixada.adrs.dao.TipoAnimalDAO;
import br.ufc.quixada.adrs.model.TipoAnimal;
import br.ufc.quixada.adrs.util.Msg;
import java.sql.SQLException;
import java.util.List;
import java.util.Collections;
import java.util.Comparator;
import org.slf4j.LoggerFactory;

/**
 *
 * @author fernando
 */
public class TipoAnimalService {

    private final TipoAnimalDAO dao = new TipoAnimalDAO();
    public static final Comparator<TipoAnimal> comparadorPorTipo = new Comparator<TipoAnimal>() {

        public int compare(TipoAnimal a, TipoAnimal b) {
            return a.getTipo().compareTo(b.getTipo());
        }
    };

    public boolean insertTipoAnimal(TipoAnimal tipoAnimal) {
        try {
            dao.insert(tipoAnimal);
            return true;
        } catch (SQLException ex) {
            LoggerFactory.getLogger(this.getClass()).error(Msg.EXCEPTION_MESSAGE, this.getClass().getSimpleName(), ex);
        }
        return false;
    }

    public boolean updateTipoAnimal(TipoAnimal tipoAnimal) {
        try {
            dao.update(tipoAnimal);
            return true;
        } catch (SQLException ex) {
            LoggerFactory.getLogger(this.getClass()).error(Msg.EXCEPTION_MESSAGE, this.getClass().getSimpleName(), ex);
        }
        return false;
    }

    public boolean deleteTipoAnimal(Integer id) {
        try {
            dao.delete(id);
            return true;
        } catch (SQLException ex) {
            LoggerFactory.getLogger(this.getClass()).error(Msg.EXCEPTION_MESSAGE, this.getClass().getSimpleName(), ex);
        }
        return false;
    }

    public TipoAnimal getTipoAnimalById(Long id) {
        try {
            return dao.getById(id);
        } catch (SQLException ex) {
            LoggerFactory.getLogger(this.getClass()).error(Msg.EXCEPTION_MESSAGE, this.getClass().getSimpleName(), ex);
        }
        return null;
    }

    public TipoAnimal getUnicoTipoAnimalByTipo(String tipo) {
        try {
            return dao.getUnicoByTipo(tipo);
        } catch (SQLException ex) {
            LoggerFactory.getLogger(this.getClass()).error(Msg.EXCEPTION_MESSAGE, this.getClass().getSimpleName(), ex);
        }
        return null;
    }

    public List<TipoAnimal> getTiposAnimaisByTipo(String tipo) {
        try {
            List<TipoAnimal> tas = dao.getByTipo(tipo);
            Collections.sort(tas, comparadorPorTipo);
            return tas;
        } catch (SQLException ex) {
            LoggerFactory.getLogger(this.getClass()).error(Msg.EXCEPTION_MESSAGE, this.getClass().getSimpleName(), ex);
        }
        return null;
    }

    public List<TipoAnimal> getAllTiposAnimais() {
        try {
            List<TipoAnimal> tas = dao.getAll();
            Collections.sort(tas, comparadorPorTipo);
            return tas;
        } catch (SQLException ex) {
            LoggerFactory.getLogger(this.getClass()).error(Msg.EXCEPTION_MESSAGE, this.getClass().getSimpleName(), ex);
        }
        return null;
    }
}
